<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>火柴拼正方形</title>
  </head>
  <body>
    <script>
      // 你将得到一个整数数组 matchsticks ，其中 matchsticks[i] 是第 i 个火柴棒的长度。你要用 所有的火柴棍 拼成一个正方形。你 不能折断 任何一根火柴棒，但你可以把它们连在一起，而且每根火柴棒必须 使用一次 。

      // 如果你能使这个正方形，则返回 true ，否则返回 false 。

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/matchsticks-to-square
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      // 输入: matchsticks = [1,1,2,2,2]
      // 输出: true
      // 解释: 能拼成一个边长为2的正方形，每边两根火柴。

      /*
      思路：1、计算数组内元素的总和 sum，并除以 4 ，判断得出的是否为整数（否返回 false, 是得出边长 d）
           2、遍历数组，找出数组内相加或本来就等于 d 的项，并移除出数组（存在不符合项返回 false, 数组清空的话返回 true）
    */

      /**
       * @param {number[]} matchsticks
       * @return {boolean}
       */
      // todo 存在多项相加为边长情况
      var makesquare = function (matchsticks) {
        // debugger
        let sum = 0
        matchsticks.forEach((e) => {
          sum += e
        })
        const d = sum / 4
        if (!(d % 1 === 0)) {
          console.log(d, '1', sum)
          return false
        }
        while (matchsticks.length > 0) {
          const n = d - matchsticks[0]
          if (n === 0) {
            matchsticks.splice(0, 1)
          } else if (matchsticks.indexOf(n, 1) !== -1) {
            matchsticks.splice(matchsticks.indexOf(n, 1), 1)
            matchsticks.splice(0, 1)
          } else {
            console.log('2')
            return false
          }
        }
        return true
      }
      console.log(makesquare([1, 1, 2, 2, 2]))
    </script>
  </body>
</html>
